<?php
/*****************************************************************************/
/* */
/* file type: 包含檔，建議尾碼為.inc */
/* */
/* file name: cart.inc */
/* */
/* Description: 定義一個購車類 */
/* */
/* Func list : class cart */
/* */
/* author : bigeagle */
/* */
/* date : 2004/02/18 */
/* */
/* History: 2004/2/18 是夢的 */
/* */
/*****************************************************************************/
/*購物車類*/
class cart
{
    static protected $sSortCount; //商品種類數
    static protected $sTotalCost; //商品總價值
    
    static protected $sId; //每類商品的ID（陣列）
    static protected $sName; //每類商品的名稱（陣列）
    static protected $sPrice; //每類商品的價格（陣列）
    static protected $sGoodPrice; //商品的優惠價格（陣列）
    static protected $sCount; //每類商品的件數（陣列）
    static protected $sPic; //每類商品的圖檔類形（陣列）
    //******構造函數
    static protected $begin = 0;
    
    static public function begin()
    {
        if(empty(self::$begin))
        {
	        @session_start(); //初始化一個session
	        $_SESSION['sId'] = $_SESSION['sId']?$_SESSION['sId']:array();
	        $_SESSION['sName'] = $_SESSION['sName']?$_SESSION['sName']:array();
	        $_SESSION['sPrice'] = $_SESSION['sPrice']?$_SESSION['sPrice']:array();
	        $_SESSION['sGoodPrice'] = $_SESSION['sGoodPrice']?$_SESSION['sGoodPrice']:array();
	        $_SESSION['sCount'] = $_SESSION['sCount']?$_SESSION['sCount']:array();
	        $_SESSION['sPic'] = $_SESSION['sPic']?$_SESSION['sPic']:array();
	        
	        self::$sId 			= &$_SESSION['sId'];
	        self::$sName 		= &$_SESSION['sName'];
	        self::$sPrice 		= &$_SESSION['sPrice'];
	        self::$sGoodPrice 	= &$_SESSION['sGoodPrice'];
	        self::$sCount 		= &$_SESSION['sCount'];
	        self::$sPic 		= &$_SESSION['sPic'];
	        //計算商品總數
	        self::$sSortCount	= count(self::$sId);
	        self::Calculate();
	        self::$begin = 1;
        }
    }
    //********私有，根據新的資料計算每類商品的價值及全部商品的總價
    protected function Calculate()
    {
        self::$sTotalCost= 0;
        for ($i= 0; $i < self::$sSortCount; $i++)
        {
            /*計算每件商品的價值，如果折扣是0 ，則為優惠價格*/
            self::$sTotalCost= self::$sTotalCost + self::$sGoodPrice[$i] * self::$sCount[$i];
        }
    }
    //**************以下為介面函數
    //*** 加一件商品
    // 判斷是否藍中已有，如有，加count，否則加一個新商品
    //首先都是改session的值，然後再調用update() and calculate()來更新成員變數
    static public function add($sId,$sName, $sPrice, $sGoodPrice, $sCount, $sPic)
    {
        self::begin();
        $k= count(self::$sId);
        for ($i= 0; $i < $k; $i++)
        { //先找一下是否已經加入了這種商品
            if (self::$sId[$i] == $sId)
            {
                self::$sCount[$i] += $sCount;
                break;
            }
        }
        if ($i >= $k)
        { //沒有則加一個新商品種類
            self::$sId[]= $sId;
            self::$sName[]= $sName;
            self::$sPrice[]= $sPrice;
            self::$sGoodPrice[]= $sGoodPrice;
            self::$sCount[]= $sCount;
            self::$sPic[]= $sPic;
        }
        self::$sSortCount	= count(self::$sId); //更新一下類的成員資料
        self::Calculate();
    }
	static public function buy($sId,$sName, $sPrice, $sGoodPrice, $sCount, $sPic)
    {
        self::begin();
        $k= count(self::$sId);
        for ($i= 0; $i < $k; $i++)
        { //先找一下是否已經加入了這種商品
            if (self::$sId[$i] == $sId)
            {
                self::$sCount[$i] = $sCount;
                break;
            }
        }
        if ($i >= $k)
        { //沒有則加一個新商品種類
            self::$sId[]= $sId;
            self::$sName[]= $sName;
            self::$sPrice[]= $sPrice;
            self::$sGoodPrice[]= $sGoodPrice;
            self::$sCount[]= $sCount;
            self::$sPic[]= $sPic;
        }
        self::$sSortCount	= count(self::$sId); //更新一下類的成員資料
        self::Calculate();
    }
    //移去一件商品
    static public function remove($sId)
    {
        self::begin();
        $k= count(self::$sId);
        for ($i= 0; $i < $k; $i++)
        {
            if (self::$sId[$i] == $sId)
            {
                unset(self::$sId[$i]);
                unset(self::$sName[$i]);
                unset(self::$sPrice[$i]);
                unset(self::$sGoodPrice[$i]);
                unset(self::$sCount[$i]);
                unset(self::$sPic[$i]);
                break;
            }
        }
        $k= count(self::$sId);
        for ($j= $i; $j < $k; $j++)
        {
            self::$sId[$j]			= self::$sId[$j +1];
            self::$sName[$j]		= self::$sName[$j +1];
            self::$sPrice[$j]		= self::$sPrice[$j +1];
            self::$sGoodPrice[$j]	= self::$sGoodPrice[$j +1];
            self::$sCount[$j]		= self::$sCount[$j +1];
            self::$sPic[$j]			= self::$sPic[$j +1];
        }
		unset(self::$sId[$k]);
		unset(self::$sName[$k]);
		unset(self::$sPrice[$k]);
		unset(self::$sGoodPrice[$k]);
		unset(self::$sCount[$k]);
		unset(self::$sPic[$k]);
        self::$sSortCount	= count(self::$sId); //更新一下類的成員資料
        self::Calculate();
    }
     //得到商品
    static public function get()
    {
        self::begin();
        $rs =	array();
        $k	=	count(self::$sId);
        for ($i= 0; $i < $k; $i++)
        { //先找一下是否已經加入了這種商品
		   if(self::$sCount[$i])
		   {
			   $rs[$i] = array(
					'id'=>self::$sId[$i],
					'name'=>self::$sName[$i],
					'price'=>self::$sPrice[$i],
					'goodprice'=>self::$sGoodPrice[$i],
					'count'=>self::$sCount[$i],
					'pic'=>self::$sPic[$i]
				);
			}
        }
        return $rs;
    }
    //改變商品的個數
    static public function ModifyCountIndex($i, $sCount)
    {
        self::begin();
        self::$sCount[$i]	= $sCount;
        self::$sSortCount	= count(self::$sId); //更新一下類的成員資料
        self::Calculate();
    }
    static public function ModifyCount($sId, $sCount)
    {
        self::begin();
        $k= count(self::$sId);
        for ($i= 0; $i < $k; $i++)
        { //先找一下是否已經加入了這種商品
            if (self::$sId[$i] == $sId)
            {
                self::$sCount[$i] = $sCount;
                break;
            }
        }
        self::$sSortCount	= count(self::$sId); //更新一下類的成員資料
        self::Calculate();
    }
    /***************************
    清空所有的商品
    *****************************/
    static public function removeAll()
    {
        self::begin();
        self::$sId 			=array();
        self::$sName 		=array();
        self::$sPrice 		=array();
        self::$sGoodPrice 	=array();
        self::$sCount 		=array();
        self::$sPic 		=array();
        self::$sSortCount= 0;
        self::$sTotalCost= 0;
    }
    //是否某件商品已在藍內，參數為此商品的ID
    static public function Exists($sId)
    {
        self::begin();
        $k= count(self::$sId);
        for ($i= 0; $i < $k; $i++)
        { //先找一下是否已經加入了這種商品
            if (self::$sId[$i]  == $sId)
            {
                return self::$sCount[$i]?self::$sCount[$i]:0;
            }
        }
        return 0;
    }
    //某件商品在藍內的位置
    static public function IndexOf($sId)
    {
        self::begin();
        $k= count(self::$sId);
        for ($i= 0; $i < $k; $i++)
        { //先找一下是否已經加入了這種商品
            if (self::$sId[$i] == $sId)
            {
                return $i;
            }
        }
        return -1;
    }
    //取總的商品價值
    static public function GetTotalCost()
    {
        self::begin();
        return self::$sTotalCost;
    }
}
//cart::add(12,12,12,12,1,12);
////$cart->add(16,16,12,12,1   , 12);
//////$cart->removeAll();
//print_r($_SESSION['sId']);
//print_r($_SESSION['sCount']);
////echo $cart->GetTotalCost();
?>